package Controller.BDD;

import java.sql.Connection; 
import java.sql.ResultSet;
import java.sql.SQLException; 
import java.sql.Statement;
import java.util.ArrayList;

import Model.Droit;
import Model.Groupe;
import Model.Utilisateur;


public class GestionRequeteUser extends GestionnaireRequeteBDD{ 

	
	public GestionRequeteUser(){

	}
	
	

	public ArrayList<Utilisateur> recupererListeDonneesUsers(String requete){
		ArrayList<Utilisateur> liste = new ArrayList<Utilisateur>();
		Connection connection = this.getConnexion();
		if(connection != null){
			Statement statement;
			try {
				statement = connection.createStatement();
				ResultSet res = statement.executeQuery(requete);
				while(res.next()){
					int id = res.getInt(1);
					String libelle = res.getString(2);
					liste.add(new Utilisateur(id,libelle,null,null));
				}
			}catch (SQLException e){
				e.printStackTrace();
				return null;
			}
			if(liste.size()==0){
				this.resetConnexion(connection);
				return null;
			}
			else{
				this.resetConnexion(connection);
				return liste;
			}
		}
		else{
			return null;
		}
	}
	
	public ArrayList<Droit> recupererListeDroitUtilisateur(String requete){
		ArrayList<Droit> listeDroit = new ArrayList<Droit>();
		ArrayList<Integer> listeID_Droit = new ArrayList<Integer>();
		Connection connection = this.getConnexion();
		if(connection != null){
			Statement statement;
			try {
				statement = connection.createStatement();
				ResultSet res = statement.executeQuery(requete);
				while(res.next()){
					int id_droit = res.getInt(1);
					listeID_Droit.add(id_droit);
				}
				for(Integer id_droit : listeID_Droit){
					ResultSet res2 = statement.executeQuery("Select * from droits where id="+id_droit+";");
					res2.next();
					String libelle = res2.getString(2);
					String description = res2.getString(3);
					String page = res2.getString(4);
					listeDroit.add(new Droit(id_droit,libelle,description,page));
				}
			}catch (SQLException e){
				e.printStackTrace();
				return null;
			}
			if(listeDroit.size()==0){
				this.resetConnexion(connection);
				return null;
			}
			else{
				this.resetConnexion(connection);
				return listeDroit;
			}
		}
		else{
			return null;
		}
	}

	public void executeStatement(String requete) {
		Connection connection = this.getConnexion();
		if(connection != null){
			Statement statement;
			try {
				statement = connection.createStatement();
				statement.execute(requete);
				this.resetConnexion(connection);
			}catch (SQLException e){
				e.printStackTrace();
			}
		}	
	}



	public ArrayList<Groupe> recupererListeGroupeUtilisateur(String requete) {
		ArrayList<Groupe> listeGroupe = new ArrayList<Groupe>();
		ArrayList<Integer> listeID_Groupe = new ArrayList<Integer>();
		Connection connection = this.getConnexion();
		if(connection != null){
			Statement statement;
			try {
				statement = connection.createStatement();
				ResultSet res = statement.executeQuery(requete);
				while(res.next()){
					int id_groupe = res.getInt(1);
					listeID_Groupe.add(id_groupe);
				}
				for(Integer id_groupe : listeID_Groupe){
					ResultSet res2 = statement.executeQuery("Select * from groupe where id="+id_groupe+";");
					res2.next();
					String libelle = res2.getString(2);
					String description = res2.getString(3);
					listeGroupe.add(new Groupe(id_groupe,libelle,description,null,null));
				}
			}catch (SQLException e){
				e.printStackTrace();
				return null;
			}
			if(listeGroupe.size()==0){
				this.resetConnexion(connection);
				return null;
			}
			else{
				this.resetConnexion(connection);
				return listeGroupe;
			}
		}
		else{
			return null;
		}
	}
	
	public Utilisateur recupererUserParID(String requete){
		Utilisateur user=null;
		Connection connection = this.getConnexion();
		if(connection != null){
			Statement statement;
			try {
				statement = connection.createStatement();
				ResultSet res = statement.executeQuery(requete);
				while(res.next()){
					int id = res.getInt(1);
					String libelle = res.getString(2);
					user= new Utilisateur(id,libelle,null,null);
				}
			}catch (SQLException e){
				e.printStackTrace();
				return null;
			}
		}
		return user;
	}

}